home *** CD-ROM | disk | FTP | other *** search
/ Chip 2007 January, February, March & April / Chip-Cover-CD-2007-02.iso / Pakiet bezpieczenstwa / mini Pentoo LiveCD 2006.1 / mpentoo-2006.1.iso / livecd.squashfs / usr / include / gaim / request.h < prev    next >
C/C++ Source or Header  |  2005-10-18  |  36KB  |  1,307 lines

  1. /**
  2.  * @file request.h Request API
  3.  * @ingroup core
  4.  *
  5.  * gaim
  6.  *
  7.  * Gaim is the legal property of its developers, whose names are too numerous
  8.  * to list here.  Please refer to the COPYRIGHT file distributed with this
  9.  * source distribution.
  10.  *
  11.  * This program is free software; you can redistribute it and/or modify
  12.  * it under the terms of the GNU General Public License as published by
  13.  * the Free Software Foundation; either version 2 of the License, or
  14.  * (at your option) any later version.
  15.  *
  16.  * This program is distributed in the hope that it will be useful,
  17.  * but WITHOUT ANY WARRANTY; without even the implied warranty of
  18.  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  19.  * GNU General Public License for more details.
  20.  *
  21.  * You should have received a copy of the GNU General Public License
  22.  * along with this program; if not, write to the Free Software
  23.  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
  24.  */
  25. #ifndef _GAIM_REQUEST_H_
  26. #define _GAIM_REQUEST_H_
  27.  
  28. #include <stdlib.h>
  29. #include <glib-object.h>
  30. #include <glib.h>
  31.  
  32. #include "account.h"
  33.  
  34. #define GAIM_DEFAULT_ACTION_NONE    -1
  35.  
  36. /**
  37.  * Request types.
  38.  */
  39. typedef enum
  40. {
  41.     GAIM_REQUEST_INPUT = 0,  /**< Text input request.        */
  42.     GAIM_REQUEST_CHOICE,     /**< Multiple-choice request.   */
  43.     GAIM_REQUEST_ACTION,     /**< Action request.            */
  44.     GAIM_REQUEST_FIELDS,     /**< Multiple fields request.   */
  45.     GAIM_REQUEST_FILE        /**< File open or save request. */
  46.  
  47. } GaimRequestType;
  48.  
  49. /**
  50.  * A type of field.
  51.  */
  52. typedef enum
  53. {
  54.     GAIM_REQUEST_FIELD_NONE,
  55.     GAIM_REQUEST_FIELD_STRING,
  56.     GAIM_REQUEST_FIELD_INTEGER,
  57.     GAIM_REQUEST_FIELD_BOOLEAN,
  58.     GAIM_REQUEST_FIELD_CHOICE,
  59.     GAIM_REQUEST_FIELD_LIST,
  60.     GAIM_REQUEST_FIELD_LABEL,
  61.     GAIM_REQUEST_FIELD_ACCOUNT
  62.  
  63. } GaimRequestFieldType;
  64.  
  65. /**
  66.  * Multiple fields request data.
  67.  */
  68. typedef struct
  69. {
  70.     GList *groups;
  71.  
  72.     GHashTable *fields;
  73.  
  74.     GList *required_fields;
  75.  
  76.     void *ui_data;
  77.  
  78. } GaimRequestFields;
  79.  
  80. /**
  81.  * A group of fields with a title.
  82.  */
  83. typedef struct
  84. {
  85.     GaimRequestFields *fields_list;
  86.  
  87.     char *title;
  88.  
  89.     GList *fields;
  90.  
  91. } GaimRequestFieldGroup;
  92.  
  93. /**
  94.  * A request field.
  95.  */
  96. typedef struct
  97. {
  98.     GaimRequestFieldType type;
  99.     GaimRequestFieldGroup *group;
  100.  
  101.     char *id;
  102.     char *label;
  103.     char *type_hint;
  104.  
  105.     gboolean visible;
  106.     gboolean required;
  107.  
  108.     union
  109.     {
  110.         struct
  111.         {
  112.             gboolean multiline;
  113.             gboolean masked;
  114.             gboolean editable;
  115.             char *default_value;
  116.             char *value;
  117.  
  118.         } string;
  119.  
  120.         struct
  121.         {
  122.             int default_value;
  123.             int value;
  124.  
  125.         } integer;
  126.  
  127.         struct
  128.         {
  129.             gboolean default_value;
  130.             gboolean value;
  131.  
  132.         } boolean;
  133.  
  134.         struct
  135.         {
  136.             int default_value;
  137.             int value;
  138.  
  139.             GList *labels;
  140.  
  141.         } choice;
  142.  
  143.         struct
  144.         {
  145.             GList *items;
  146.             GHashTable *item_data;
  147.             GList *selected;
  148.             GHashTable *selected_table;
  149.  
  150.             gboolean multiple_selection;
  151.  
  152.         } list;
  153.  
  154.         struct
  155.         {
  156.             GaimAccount *default_account;
  157.             GaimAccount *account;
  158.             gboolean show_all;
  159.  
  160.             GaimFilterAccountFunc filter_func;
  161.  
  162.         } account;
  163.  
  164.     } u;
  165.  
  166.     void *ui_data;
  167.  
  168. } GaimRequestField;
  169.  
  170. /**
  171.  * Request UI operations.
  172.  */
  173. typedef struct
  174. {
  175.     void *(*request_input)(const char *title, const char *primary,
  176.                            const char *secondary, const char *default_value,
  177.                            gboolean multiline, gboolean masked, gchar *hint,
  178.                            const char *ok_text, GCallback ok_cb,
  179.                            const char *cancel_text, GCallback cancel_cb,
  180.                            void *user_data);
  181.     void *(*request_choice)(const char *title, const char *primary,
  182.                             const char *secondary, unsigned int default_value,
  183.                             const char *ok_text, GCallback ok_cb,
  184.                             const char *cancel_text, GCallback cancel_cb,
  185.                             void *user_data, size_t choice_count,
  186.                             va_list choices);
  187.     void *(*request_action)(const char *title, const char *primary,
  188.                             const char *secondary, unsigned int default_action,
  189.                             void *user_data, size_t action_count,
  190.                             va_list actions);
  191.     void *(*request_fields)(const char *title, const char *primary,
  192.                             const char *secondary, GaimRequestFields *fields,
  193.                             const char *ok_text, GCallback ok_cb,
  194.                             const char *cancel_text, GCallback cancel_cb,
  195.                             void *user_data);
  196.     void *(*request_file)(const char *title, const char *filename,
  197.                           gboolean savedialog, GCallback ok_cb,
  198.                           GCallback cancel_cb, void *user_data);
  199.     void (*close_request)(GaimRequestType type, void *ui_handle);
  200. } GaimRequestUiOps;
  201.  
  202. typedef void (*GaimRequestInputCb)(void *, const char *);
  203. typedef void (*GaimRequestActionCb)(void *, int);
  204. typedef void (*GaimRequestFieldsCb)(void *, GaimRequestFields *fields);
  205. typedef void (*GaimRequestFileCb)(void *, const char *filename);
  206.  
  207. #ifdef __cplusplus
  208. extern "C" {
  209. #endif
  210.  
  211. /**************************************************************************/
  212. /** @name Field List API                                                  */
  213. /**************************************************************************/
  214. /*@{*/
  215.  
  216. /**
  217.  * Creates a list of fields to pass to gaim_request_fields().
  218.  *
  219.  * @return A GaimRequestFields structure.
  220.  */
  221. GaimRequestFields *gaim_request_fields_new(void);
  222.  
  223. /**
  224.  * Destroys a list of fields.
  225.  *
  226.  * @param fields The list of fields to destroy.
  227.  */
  228. void gaim_request_fields_destroy(GaimRequestFields *fields);
  229.  
  230. /**
  231.  * Adds a group of fields to the list.
  232.  *
  233.  * @param fields The fields list.
  234.  * @param group  The group to add.
  235.  */
  236. void gaim_request_fields_add_group(GaimRequestFields *fields,
  237.                                    GaimRequestFieldGroup *group);
  238.  
  239. /**
  240.  * Returns a list of all groups in a field list.
  241.  *
  242.  * @param fields The fields list.
  243.  *
  244.  * @return A list of groups.
  245.  */
  246. GList *gaim_request_fields_get_groups(const GaimRequestFields *fields);
  247.  
  248. /**
  249.  * Returns whether or not the field with the specified ID exists.
  250.  *
  251.  * @param fields The fields list.
  252.  * @param id     The ID of the field.
  253.  *
  254.  * @return TRUE if the field exists, or FALSE.
  255.  */
  256. gboolean gaim_request_fields_exists(const GaimRequestFields *fields,
  257.                                     const char *id);
  258.  
  259. /**
  260.  * Returns a list of all required fields.
  261.  *
  262.  * @param fields The fields list.
  263.  *
  264.  * @return The list of required fields.
  265.  */
  266. const GList *gaim_request_fields_get_required(const GaimRequestFields *fields);
  267.  
  268. /**
  269.  * Returns whether or not a field with the specified ID is required.
  270.  *
  271.  * @param fields The fields list.
  272.  * @param id     The field ID.
  273.  *
  274.  * @return TRUE if the specified field is required, or FALSE.
  275.  */
  276. gboolean gaim_request_fields_is_field_required(const GaimRequestFields *fields,
  277.                                                const char *id);
  278.  
  279. /**
  280.  * Returns whether or not all required fields have values.
  281.  *
  282.  * @param fields The fields list.
  283.  *
  284.  * @return TRUE if all required fields have values, or FALSE.
  285.  */
  286. gboolean gaim_request_fields_all_required_filled(
  287.     const GaimRequestFields *fields);
  288.  
  289. /**
  290.  * Return the field with the specified ID.
  291.  *
  292.  * @param fields The fields list.
  293.  * @param id     The ID of the field.
  294.  *
  295.  * @return The field, if found.
  296.  */
  297. GaimRequestField *gaim_request_fields_get_field(
  298.         const GaimRequestFields *fields, const char *id);
  299.  
  300. /**
  301.  * Returns the string value of a field with the specified ID.
  302.  *
  303.  * @param fields The fields list.
  304.  * @param id     The ID of the field.
  305.  *
  306.  * @return The string value, if found, or @c NULL otherwise.
  307.  */
  308. const char *gaim_request_fields_get_string(const GaimRequestFields *fields,
  309.                                            const char *id);
  310.  
  311. /**
  312.  * Returns the integer value of a field with the specified ID.
  313.  *
  314.  * @param fields The fields list.
  315.  * @param id     The ID of the field.
  316.  *
  317.  * @return The integer value, if found, or 0 otherwise.
  318.  */
  319. int gaim_request_fields_get_integer(const GaimRequestFields *fields,
  320.                                     const char *id);
  321.  
  322. /**
  323.  * Returns the boolean value of a field with the specified ID.
  324.  *
  325.  * @param fields The fields list.
  326.  * @param id     The ID of the field.
  327.  *
  328.  * @return The boolean value, if found, or @c FALSE otherwise.
  329.  */
  330. gboolean gaim_request_fields_get_bool(const GaimRequestFields *fields,
  331.                                       const char *id);
  332.  
  333. /**
  334.  * Returns the choice index of a field with the specified ID.
  335.  *
  336.  * @param fields The fields list.
  337.  * @param id     The ID of the field.
  338.  *
  339.  * @return The choice index, if found, or -1 otherwise.
  340.  */
  341. int gaim_request_fields_get_choice(const GaimRequestFields *fields,
  342.                                    const char *id);
  343.  
  344. /**
  345.  * Returns the account of a field with the specified ID.
  346.  *
  347.  * @param fields The fields list.
  348.  * @param id     The ID of the field.
  349.  *
  350.  * @return The account value, if found, or NULL otherwise.
  351.  */
  352. GaimAccount *gaim_request_fields_get_account(const GaimRequestFields *fields,
  353.                                              const char *id);
  354.  
  355. /*@}*/
  356.  
  357. /**************************************************************************/
  358. /** @name Fields Group API                                                */
  359. /**************************************************************************/
  360. /*@{*/
  361.  
  362. /**
  363.  * Creates a fields group with an optional title.
  364.  *
  365.  * @param title The optional title to give the group.
  366.  *
  367.  * @return A new fields group
  368.  */
  369. GaimRequestFieldGroup *gaim_request_field_group_new(const char *title);
  370.  
  371. /**
  372.  * Destroys a fields group.
  373.  *
  374.  * @param group The group to destroy.
  375.  */
  376. void gaim_request_field_group_destroy(GaimRequestFieldGroup *group);
  377.  
  378. /**
  379.  * Adds a field to the group.
  380.  *
  381.  * @param group The group to add the field to.
  382.  * @param field The field to add to the group.
  383.  */
  384. void gaim_request_field_group_add_field(GaimRequestFieldGroup *group,
  385.                                         GaimRequestField *field);
  386.  
  387. /**
  388.  * Returns the title of a fields group.
  389.  *
  390.  * @param group The group.
  391.  *
  392.  * @return The title, if set.
  393.  */
  394. const char *gaim_request_field_group_get_title(
  395.         const GaimRequestFieldGroup *group);
  396.  
  397. /**
  398.  * Returns a list of all fields in a group.
  399.  *
  400.  * @param group The group.
  401.  *
  402.  * @return The list of fields in the group.
  403.  */
  404. GList *gaim_request_field_group_get_fields(
  405.         const GaimRequestFieldGroup *group);
  406.  
  407. /*@}*/
  408.  
  409. /**************************************************************************/
  410. /** @name Field API                                                       */
  411. /**************************************************************************/
  412. /*@{*/
  413.  
  414. /**
  415.  * Creates a field of the specified type.
  416.  *
  417.  * @param id   The field ID.
  418.  * @param text The text label of the field.
  419.  * @param type The type of field.
  420.  *
  421.  * @return The new field.
  422.  */
  423. GaimRequestField *gaim_request_field_new(const char *id, const char *text,
  424.                                          GaimRequestFieldType type);
  425.  
  426. /**
  427.  * Destroys a field.
  428.  *
  429.  * @param field The field to destroy.
  430.  */
  431. void gaim_request_field_destroy(GaimRequestField *field);
  432.  
  433. /**
  434.  * Sets the label text of a field.
  435.  *
  436.  * @param field The field.
  437.  * @param label The text label.
  438.  */
  439. void gaim_request_field_set_label(GaimRequestField *field, const char *label);
  440.  
  441. /**
  442.  * Sets whether or not a field is visible.
  443.  *
  444.  * @param field   The field.
  445.  * @param visible TRUE if visible, or FALSE if not.
  446.  */
  447. void gaim_request_field_set_visible(GaimRequestField *field, gboolean visible);
  448.  
  449. /**
  450.  * Sets the type hint for the field.
  451.  *
  452.  * This is optionally used by the UIs to provide such features as
  453.  * auto-completion for type hints like "screenname."
  454.  *
  455.  * @param field     The field.
  456.  * @param type_hint The type hint.
  457.  */
  458. void gaim_request_field_set_type_hint(GaimRequestField *field,
  459.                                       const char *type_hint);
  460.  
  461. /**
  462.  * Sets whether or not a field is required.
  463.  *
  464.  * @param field    The field.
  465.  * @param required TRUE if required, or FALSE.
  466.  */
  467. void gaim_request_field_set_required(GaimRequestField *field,
  468.                                      gboolean required);
  469.  
  470. /**
  471.  * Returns the type of a field.
  472.  *
  473.  * @param field The field.
  474.  *
  475.  * @return The field's type.
  476.  */
  477. GaimRequestFieldType gaim_request_field_get_type(const GaimRequestField *field);
  478.  
  479. /**
  480.  * Returns the ID of a field.
  481.  *
  482.  * @param field The field.
  483.  *
  484.  * @return The ID
  485.  */
  486. const char *gaim_request_field_get_id(const GaimRequestField *field);
  487.  
  488. /**
  489.  * Returns the label text of a field.
  490.  *
  491.  * @param field The field.
  492.  *
  493.  * @return The label text.
  494.  */
  495. const char *gaim_request_field_get_label(const GaimRequestField *field);
  496.  
  497. /**
  498.  * Returns whether or not a field is visible.
  499.  *
  500.  * @param field The field.
  501.  *
  502.  * @return TRUE if the field is visible. FALSE otherwise.
  503.  */
  504. gboolean gaim_request_field_is_visible(const GaimRequestField *field);
  505.  
  506. /**
  507.  * Returns the field's type hint.
  508.  *
  509.  * @param field The field.
  510.  *
  511.  * @return The field's type hint.
  512.  */
  513. const char *gaim_request_field_get_type_hint(const GaimRequestField *field);
  514.  
  515. /**
  516.  * Returns whether or not a field is required.
  517.  *
  518.  * @param field The field.
  519.  *
  520.  * @return TRUE if the field is required, or FALSE.
  521.  */
  522. gboolean gaim_request_field_is_required(const GaimRequestField *field);
  523.  
  524. /*@}*/
  525.  
  526. /**************************************************************************/
  527. /** @name String Field API                                                */
  528. /**************************************************************************/
  529. /*@{*/
  530.  
  531. /**
  532.  * Creates a string request field.
  533.  *
  534.  * @param id            The field ID.
  535.  * @param text          The text label of the field.
  536.  * @param default_value The optional default value.
  537.  * @param multiline     Whether or not this should be a multiline string.
  538.  *
  539.  * @return The new field.
  540.  */
  541. GaimRequestField *gaim_request_field_string_new(const char *id,
  542.                                                 const char *text,
  543.                                                 const char *default_value,
  544.                                                 gboolean multiline);
  545.  
  546. /**
  547.  * Sets the default value in a string field.
  548.  *
  549.  * @param field         The field.
  550.  * @param default_value The default value.
  551.  */
  552. void gaim_request_field_string_set_default_value(GaimRequestField *field,
  553.                                                  const char *default_value);
  554.  
  555. /**
  556.  * Sets the value in a string field.
  557.  *
  558.  * @param field The field.
  559.  * @param value The value.
  560.  */
  561. void gaim_request_field_string_set_value(GaimRequestField *field,
  562.                                          const char *value);
  563.  
  564. /**
  565.  * Sets whether or not a string field is masked
  566.  * (commonly used for password fields).
  567.  *
  568.  * @param field  The field.
  569.  * @param masked The masked value.
  570.  */
  571. void gaim_request_field_string_set_masked(GaimRequestField *field,
  572.                                           gboolean masked);
  573.  
  574. /**
  575.  * Sets whether or not a string field is editable.
  576.  *
  577.  * @param field    The field.
  578.  * @param editable The editable value.
  579.  */
  580. void gaim_request_field_string_set_editable(GaimRequestField *field,
  581.                                             gboolean editable);
  582.  
  583. /**
  584.  * Returns the default value in a string field.
  585.  *
  586.  * @param field The field.
  587.  *
  588.  * @return The default value.
  589.  */
  590. const char *gaim_request_field_string_get_default_value(
  591.         const GaimRequestField *field);
  592.  
  593. /**
  594.  * Returns the user-entered value in a string field.
  595.  *
  596.  * @param field The field.
  597.  *
  598.  * @return The value.
  599.  */
  600. const char *gaim_request_field_string_get_value(const GaimRequestField *field);
  601.  
  602. /**
  603.  * Returns whether or not a string field is multi-line.
  604.  *
  605.  * @param field The field.
  606.  *
  607.  * @return @c TRUE if the field is mulit-line, or @c FALSE otherwise.
  608.  */
  609. gboolean gaim_request_field_string_is_multiline(const GaimRequestField *field);
  610.  
  611. /**
  612.  * Returns whether or not a string field is masked.
  613.  *
  614.  * @param field The field.
  615.  *
  616.  * @return @c TRUE if the field is masked, or @c FALSE otherwise.
  617.  */
  618. gboolean gaim_request_field_string_is_masked(const GaimRequestField *field);
  619.  
  620. /**
  621.  * Returns whether or not a string field is editable.
  622.  *
  623.  * @param field The field.
  624.  *
  625.  * @return @c TRUE if the field is editable, or @c FALSE otherwise.
  626.  */
  627. gboolean gaim_request_field_string_is_editable(const GaimRequestField *field);
  628.  
  629. /*@}*/
  630.  
  631. /**************************************************************************/
  632. /** @name Integer Field API                                               */
  633. /**************************************************************************/
  634. /*@{*/
  635.  
  636. /**
  637.  * Creates an integer field.
  638.  *
  639.  * @param id            The field ID.
  640.  * @param text          The text label of the field.
  641.  * @param default_value The default value.
  642.  *
  643.  * @return The new field.
  644.  */
  645. GaimRequestField *gaim_request_field_int_new(const char *id,
  646.                                              const char *text,
  647.                                              int default_value);
  648.  
  649. /**
  650.  * Sets the default value in an integer field.
  651.  *
  652.  * @param field         The field.
  653.  * @param default_value The default value.
  654.  */
  655. void gaim_request_field_int_set_default_value(GaimRequestField *field,
  656.                                               int default_value);
  657.  
  658. /**
  659.  * Sets the value in an integer field.
  660.  *
  661.  * @param field The field.
  662.  * @param value The value.
  663.  */
  664. void gaim_request_field_int_set_value(GaimRequestField *field, int value);
  665.  
  666. /**
  667.  * Returns the default value in an integer field.
  668.  *
  669.  * @param field The field.
  670.  *
  671.  * @return The default value.
  672.  */
  673. int gaim_request_field_int_get_default_value(const GaimRequestField *field);
  674.  
  675. /**
  676.  * Returns the user-entered value in an integer field.
  677.  *
  678.  * @param field The field.
  679.  *
  680.  * @return The value.
  681.  */
  682. int gaim_request_field_int_get_value(const GaimRequestField *field);
  683.  
  684. /*@}*/
  685.  
  686. /**************************************************************************/
  687. /** @name Boolean Field API                                               */
  688. /**************************************************************************/
  689. /*@{*/
  690.  
  691. /**
  692.  * Creates a boolean field.
  693.  *
  694.  * This is often represented as a checkbox.
  695.  *
  696.  * @param id            The field ID.
  697.  * @param text          The text label of the field.
  698.  * @param default_value The default value.
  699.  *
  700.  * @return The new field.
  701.  */
  702. GaimRequestField *gaim_request_field_bool_new(const char *id,
  703.                                               const char *text,
  704.                                               gboolean default_value);
  705.  
  706. /**
  707.  * Sets the default value in an boolean field.
  708.  *
  709.  * @param field         The field.
  710.  * @param default_value The default value.
  711.  */
  712. void gaim_request_field_bool_set_default_value(GaimRequestField *field,
  713.                                                gboolean default_value);
  714.  
  715. /**
  716.  * Sets the value in an boolean field.
  717.  *
  718.  * @param field The field.
  719.  * @param value The value.
  720.  */
  721. void gaim_request_field_bool_set_value(GaimRequestField *field,
  722.                                        gboolean value);
  723.  
  724. /**
  725.  * Returns the default value in an boolean field.
  726.  *
  727.  * @param field The field.
  728.  *
  729.  * @return The default value.
  730.  */
  731. gboolean gaim_request_field_bool_get_default_value(
  732.         const GaimRequestField *field);
  733.  
  734. /**
  735.  * Returns the user-entered value in an boolean field.
  736.  *
  737.  * @param field The field.
  738.  *
  739.  * @return The value.
  740.  */
  741. gboolean gaim_request_field_bool_get_value(const GaimRequestField *field);
  742.  
  743. /*@}*/
  744.  
  745. /**************************************************************************/
  746. /** @name Choice Field API                                                */
  747. /**************************************************************************/
  748. /*@{*/
  749.  
  750. /**
  751.  * Creates a multiple choice field.
  752.  *
  753.  * This is often represented as a group of radio buttons.
  754.  *
  755.  * @param id            The field ID.
  756.  * @param text          The optional label of the field.
  757.  * @param default_value The default choice.
  758.  *
  759.  * @return The new field.
  760.  */
  761. GaimRequestField *gaim_request_field_choice_new(const char *id,
  762.                                                 const char *text,
  763.                                                 int default_value);
  764.  
  765. /**
  766.  * Adds a choice to a multiple choice field.
  767.  *
  768.  * @param field The choice field.
  769.  * @param label The choice label.
  770.  */
  771. void gaim_request_field_choice_add(GaimRequestField *field,
  772.                                    const char *label);
  773.  
  774. /**
  775.  * Sets the default value in an choice field.
  776.  *
  777.  * @param field         The field.
  778.  * @param default_value The default value.
  779.  */
  780. void gaim_request_field_choice_set_default_value(GaimRequestField *field,
  781.                                                  int default_value);
  782.  
  783. /**
  784.  * Sets the value in an choice field.
  785.  *
  786.  * @param field The field.
  787.  * @param value The value.
  788.  */
  789. void gaim_request_field_choice_set_value(GaimRequestField *field, int value);
  790.  
  791. /**
  792.  * Returns the default value in an choice field.
  793.  *
  794.  * @param field The field.
  795.  *
  796.  * @return The default value.
  797.  */
  798. int gaim_request_field_choice_get_default_value(const GaimRequestField *field);
  799.  
  800. /**
  801.  * Returns the user-entered value in an choice field.
  802.  *
  803.  * @param field The field.
  804.  *
  805.  * @return The value.
  806.  */
  807. int gaim_request_field_choice_get_value(const GaimRequestField *field);
  808.  
  809. /**
  810.  * Returns a list of labels in a choice field.
  811.  *
  812.  * @param field The field.
  813.  *
  814.  * @return The list of labels.
  815.  */
  816. GList *gaim_request_field_choice_get_labels(const GaimRequestField *field);
  817.  
  818. /*@}*/
  819.  
  820. /**************************************************************************/
  821. /** @name List Field API                                                  */
  822. /**************************************************************************/
  823. /*@{*/
  824.  
  825. /**
  826.  * Creates a multiple list item field.
  827.  *
  828.  * @param id   The field ID.
  829.  * @param text The optional label of the field.
  830.  *
  831.  * @return The new field.
  832.  */
  833. GaimRequestField *gaim_request_field_list_new(const char *id, const char *text);
  834.  
  835. /**
  836.  * Sets whether or not a list field allows multiple selection.
  837.  *
  838.  * @param field        The list field.
  839.  * @param multi_select TRUE if multiple selection is enabled,
  840.  *                     or FALSE otherwise.
  841.  */
  842. void gaim_request_field_list_set_multi_select(GaimRequestField *field,
  843.                                               gboolean multi_select);
  844.  
  845. /**
  846.  * Returns whether or not a list field allows multiple selection.
  847.  *
  848.  * @param field The list field.
  849.  *
  850.  * @return TRUE if multiple selection is enabled, or FALSE otherwise.
  851.  */
  852. gboolean gaim_request_field_list_get_multi_select(
  853.     const GaimRequestField *field);
  854.  
  855. /**
  856.  * Returns the data for a particular item.
  857.  *
  858.  * @param field The list field.
  859.  * @param text  The item text.
  860.  *
  861.  * @return The data associated with the item.
  862.  */
  863. void *gaim_request_field_list_get_data(const GaimRequestField *field,
  864.                                        const char *text);
  865.  
  866. /**
  867.  * Adds an item to a list field.
  868.  *
  869.  * @param field The list field.
  870.  * @param item  The list item.
  871.  * @param data  The associated data.
  872.  */
  873. void gaim_request_field_list_add(GaimRequestField *field,
  874.                                  const char *item, void *data);
  875.  
  876. /**
  877.  * Adds a selected item to the list field.
  878.  *
  879.  * @param field The field.
  880.  * @param item  The item to add.
  881.  */
  882. void gaim_request_field_list_add_selected(GaimRequestField *field,
  883.                                           const char *item);
  884.  
  885. /**
  886.  * Clears the list of selected items in a list field.
  887.  *
  888.  * @param field The field.
  889.  */
  890. void gaim_request_field_list_clear_selected(GaimRequestField *field);
  891.  
  892. /**
  893.  * Sets a list of selected items in a list field.
  894.  *
  895.  * @param field The field.
  896.  * @param items The list of selected items.
  897.  */
  898. void gaim_request_field_list_set_selected(GaimRequestField *field,
  899.                                           GList *items);
  900.  
  901. /**
  902.  * Returns whether or not a particular item is selected in a list field.
  903.  *
  904.  * @param field The field.
  905.  * @param item  The item.
  906.  *
  907.  * @return TRUE if the item is selected. FALSE otherwise.
  908.  */
  909. gboolean gaim_request_field_list_is_selected(const GaimRequestField *field,
  910.                                              const char *item);
  911.  
  912. /**
  913.  * Returns a list of selected items in a list field.
  914.  *
  915.  * To retrieve the data for each item, use
  916.  * gaim_request_field_list_get_data().
  917.  *
  918.  * @param field The field.
  919.  *
  920.  * @return The list of selected items.
  921.  */
  922. const GList *gaim_request_field_list_get_selected(
  923.     const GaimRequestField *field);
  924.  
  925. /**
  926.  * Returns a list of items in a list field.
  927.  *
  928.  * @param field The field.
  929.  *
  930.  * @return The list of items.
  931.  */
  932. const GList *gaim_request_field_list_get_items(const GaimRequestField *field);
  933.  
  934. /*@}*/
  935.  
  936. /**************************************************************************/
  937. /** @name Label Field API                                                 */
  938. /**************************************************************************/
  939. /*@{*/
  940.  
  941. /**
  942.  * Creates a label field.
  943.  *
  944.  * @param id   The field ID.
  945.  * @param text The label of the field.
  946.  *
  947.  * @return The new field.
  948.  */
  949. GaimRequestField *gaim_request_field_label_new(const char *id,
  950.                                                const char *text);
  951.  
  952. /*@}*/
  953.  
  954. /**************************************************************************/
  955. /** @name Account Field API                                               */
  956. /**************************************************************************/
  957. /*@{*/
  958.  
  959. /**
  960.  * Creates an account field.
  961.  *
  962.  * By default, this field will not show offline accounts.
  963.  *
  964.  * @param id      The field ID.
  965.  * @param text    The text label of the field.
  966.  * @param account The optional default account.
  967.  *
  968.  * @return The new field.
  969.  */
  970. GaimRequestField *gaim_request_field_account_new(const char *id,
  971.                                                  const char *text,
  972.                                                  GaimAccount *account);
  973.  
  974. /**
  975.  * Sets the default account on an account field.
  976.  *
  977.  * @param field         The account field.
  978.  * @param default_value The default account.
  979.  */
  980. void gaim_request_field_account_set_default_value(GaimRequestField *field,
  981.                                                   GaimAccount *default_value);
  982.  
  983. /**
  984.  * Sets the account in an account field.
  985.  *
  986.  * @param field The account field.
  987.  * @param value The account.
  988.  */
  989. void gaim_request_field_account_set_value(GaimRequestField *field,
  990.                                           GaimAccount *value);
  991.  
  992. /**
  993.  * Sets whether or not to show all accounts in an account field.
  994.  *
  995.  * If TRUE, all accounts, online or offline, will be shown. If FALSE,
  996.  * only online accounts will be shown.
  997.  *
  998.  * @param field    The account field.
  999.  * @param show_all Whether or not to show all accounts.
  1000.  */
  1001. void gaim_request_field_account_set_show_all(GaimRequestField *field,
  1002.                                              gboolean show_all);
  1003.  
  1004. /**
  1005.  * Sets the account filter function in an account field.
  1006.  *
  1007.  * This function will determine which accounts get displayed and which
  1008.  * don't.
  1009.  *
  1010.  * @param field       The account field.
  1011.  * @param filter_func The account filter function.
  1012.  */
  1013. void gaim_request_field_account_set_filter(GaimRequestField *field,
  1014.                                            GaimFilterAccountFunc filter_func);
  1015.  
  1016. /**
  1017.  * Returns the default account in an account field.
  1018.  *
  1019.  * @param field The field.
  1020.  *
  1021.  * @return The default account.
  1022.  */
  1023. GaimAccount *gaim_request_field_account_get_default_value(
  1024.         const GaimRequestField *field);
  1025.  
  1026. /**
  1027.  * Returns the user-entered account in an account field.
  1028.  *
  1029.  * @param field The field.
  1030.  *
  1031.  * @return The user-entered account.
  1032.  */
  1033. GaimAccount *gaim_request_field_account_get_value(
  1034.         const GaimRequestField *field);
  1035.  
  1036. /**
  1037.  * Returns whether or not to show all accounts in an account field.
  1038.  *
  1039.  * If TRUE, all accounts, online or offline, will be shown. If FALSE,
  1040.  * only online accounts will be shown.
  1041.  *
  1042.  * @param field    The account field.
  1043.  * @return Whether or not to show all accounts.
  1044.  */
  1045. gboolean gaim_request_field_account_get_show_all(
  1046.         const GaimRequestField *field);
  1047.  
  1048. /**
  1049.  * Returns the account filter function in an account field.
  1050.  *
  1051.  * This function will determine which accounts get displayed and which
  1052.  * don't.
  1053.  *
  1054.  * @param field       The account field.
  1055.  *
  1056.  * @return The account filter function.
  1057.  */
  1058. GaimFilterAccountFunc gaim_request_field_account_get_filter(
  1059.         const GaimRequestField *field);
  1060.  
  1061. /*@}*/
  1062.  
  1063. /**************************************************************************/
  1064. /** @name Request API                                                     */
  1065. /**************************************************************************/
  1066. /*@{*/
  1067.  
  1068. /**
  1069.  * Prompts the user for text input.
  1070.  *
  1071.  * @param handle        The plugin or connection handle.
  1072.  * @param title         The title of the message.
  1073.  * @param primary       The main point of the message.
  1074.  * @param secondary     The secondary information.
  1075.  * @param default_value The default value.
  1076.  * @param multiline     TRUE if the inputted text can span multiple lines.
  1077.  * @param masked        TRUE if the inputted text should be masked in some way.
  1078.  * @param hint          Optionally suggest how the input box should appear.
  1079.  *                      Use "html," for example, to allow the user to enter
  1080.  *                      HTML.
  1081.  * @param ok_text       The text for the OK button.
  1082.  * @param ok_cb         The callback for the OK button.
  1083.  * @param cancel_text   The text for the cancel button.
  1084.  * @param cancel_cb     The callback for the cancel button.
  1085.  * @param user_data     The data to pass to the callback.
  1086.  *
  1087.  * @return A UI-specific handle.
  1088.  */
  1089. void *gaim_request_input(void *handle, const char *title,
  1090.                          const char *primary, const char *secondary,
  1091.                          const char *default_value,
  1092.                          gboolean multiline, gboolean masked, gchar *hint,
  1093.                          const char *ok_text, GCallback ok_cb,
  1094.                          const char *cancel_text, GCallback cancel_cb,
  1095.                          void *user_data);
  1096.  
  1097. /**
  1098.  * Prompts the user for multiple-choice input.
  1099.  *
  1100.  * @param handle        The plugin or connection handle.
  1101.  * @param title         The title of the message.
  1102.  * @param primary       The main point of the message.
  1103.  * @param secondary     The secondary information.
  1104.  * @param default_value The default value.
  1105.  * @param ok_text       The text for the OK button.
  1106.  * @param ok_cb         The callback for the OK button.
  1107.  * @param cancel_text   The text for the cancel button.
  1108.  * @param cancel_cb     The callback for the cancel button.
  1109.  * @param user_data     The data to pass to the callback.
  1110.  * @param choice_count  The number of choices.
  1111.  * @param ...           The choices.
  1112.  *
  1113.  * @return A UI-specific handle.
  1114.  */
  1115. void *gaim_request_choice(void *handle, const char *title,
  1116.                           const char *primary, const char *secondary,
  1117.                           unsigned int default_value,
  1118.                           const char *ok_text, GCallback ok_cb,
  1119.                           const char *cancel_text, GCallback cancel_cb,
  1120.                           void *user_data, size_t choice_count, ...);
  1121.  
  1122. /**
  1123.  * Prompts the user for multiple-choice input.
  1124.  *
  1125.  * @param handle        The plugin or connection handle.
  1126.  * @param title         The title of the message.
  1127.  * @param primary       The main point of the message.
  1128.  * @param secondary     The secondary information.
  1129.  * @param default_value The default value.
  1130.  * @param ok_text       The text for the OK button.
  1131.  * @param ok_cb         The callback for the OK button.
  1132.  * @param cancel_text   The text for the cancel button.
  1133.  * @param cancel_cb     The callback for the cancel button.
  1134.  * @param user_data     The data to pass to the callback.
  1135.  * @param choice_count  The number of choices.
  1136.  * @param choices       The choices.
  1137.  *
  1138.  * @return A UI-specific handle.
  1139.  */
  1140. void *gaim_request_choice_varg(void *handle, const char *title,
  1141.                                const char *primary, const char *secondary,
  1142.                                unsigned int default_value,
  1143.                                const char *ok_text, GCallback ok_cb,
  1144.                                const char *cancel_text, GCallback cancel_cb,
  1145.                                void *user_data, size_t choice_count,
  1146.                                va_list choices);
  1147.  
  1148. /**
  1149.  * Prompts the user for an action.
  1150.  *
  1151.  * This is often represented as a dialog with a button for each action.
  1152.  *
  1153.  * @param handle         The plugin or connection handle.
  1154.  * @param title          The title of the message.
  1155.  * @param primary        The main point of the message.
  1156.  * @param secondary      The secondary information.
  1157.  * @param default_action The default value.
  1158.  * @param user_data      The data to pass to the callback.
  1159.  * @param action_count   The number of actions.
  1160.  * @param ...            A list of actions.
  1161.  *
  1162.  * @return A UI-specific handle.
  1163.  */
  1164. void *gaim_request_action(void *handle, const char *title,
  1165.                           const char *primary, const char *secondary,
  1166.                           unsigned int default_action,
  1167.                           void *user_data, size_t action_count, ...);
  1168.  
  1169. /**
  1170.  * Prompts the user for an action.
  1171.  *
  1172.  * This is often represented as a dialog with a button for each action.
  1173.  *
  1174.  * @param handle         The plugin or connection handle.
  1175.  * @param title          The title of the message.
  1176.  * @param primary        The main point of the message.
  1177.  * @param secondary      The secondary information.
  1178.  * @param default_action The default value.
  1179.  * @param user_data      The data to pass to the callback.
  1180.  * @param action_count   The number of actions.
  1181.  * @param actions        A list of actions and callbacks.
  1182.  *
  1183.  * @return A UI-specific handle.
  1184.  */
  1185. void *gaim_request_action_varg(void *handle, const char *title,
  1186.                                const char *primary, const char *secondary,
  1187.                                unsigned int default_action,
  1188.                                void *user_data, size_t action_count,
  1189.                                va_list actions);
  1190.  
  1191. /**
  1192.  * Displays groups of fields for the user to fill in.
  1193.  *
  1194.  * @param handle      The plugin or connection handle.
  1195.  * @param title       The title of the message.
  1196.  * @param primary     The main point of the message.
  1197.  * @param secondary   The secondary information.
  1198.  * @param fields      The list of fields.
  1199.  * @param ok_text     The text for the OK button.
  1200.  * @param ok_cb       The callback for the OK button.
  1201.  * @param cancel_text The text for the cancel button.
  1202.  * @param cancel_cb   The callback for the cancel button.
  1203.  * @param user_data   The data to pass to the callback.
  1204.  *
  1205.  * @return A UI-specific handle.
  1206.  */
  1207. void *gaim_request_fields(void *handle, const char *title,
  1208.                           const char *primary, const char *secondary,
  1209.                           GaimRequestFields *fields,
  1210.                           const char *ok_text, GCallback ok_cb,
  1211.                           const char *cancel_text, GCallback cancel_cb,
  1212.                           void *user_data);
  1213.  
  1214. /**
  1215.  * Closes a request.
  1216.  *
  1217.  * @param type     The request type.
  1218.  * @param uihandle The request UI handle.
  1219.  */
  1220. void gaim_request_close(GaimRequestType type, void *uihandle);
  1221.  
  1222. /**
  1223.  * Closes all requests registered with the specified handle.
  1224.  *
  1225.  * @param handle The handle.
  1226.  */
  1227. void gaim_request_close_with_handle(void *handle);
  1228.  
  1229. /**
  1230.  * A wrapper for gaim_request_action() that uses Yes and No buttons.
  1231.  */
  1232. #define gaim_request_yes_no(handle, title, primary, secondary, \
  1233.                             default_action, user_data, yes_cb, no_cb) \
  1234.     gaim_request_action((handle), (title), (primary), (secondary), \
  1235.                         (default_action), (user_data), 2, \
  1236.                         _("Yes"), (yes_cb), _("No"), (no_cb))
  1237.  
  1238. /**
  1239.  * A wrapper for gaim_request_action() that uses OK and Cancel buttons.
  1240.  */
  1241. #define gaim_request_ok_cancel(handle, title, primary, secondary, \
  1242.                             default_action, user_data, ok_cb, cancel_cb) \
  1243.     gaim_request_action((handle), (title), (primary), (secondary), \
  1244.                         (default_action), (user_data), 2, \
  1245.                         _("OK"), (ok_cb), _("Cancel"), (cancel_cb))
  1246.  
  1247. /**
  1248.  * A wrapper for gaim_request_action() that uses Accept and Cancel buttons.
  1249.  */
  1250. #define gaim_request_accept_cancel(handle, title, primary, secondary, \
  1251.                                    default_action, user_data, accept_cb, \
  1252.                                    cancel_cb) \
  1253.     gaim_request_action((handle), (title), (primary), (secondary), \
  1254.                         (default_action), (user_data), 2, \
  1255.                         _("Accept"), (accept_cb), _("Cancel"), (cancel_cb))
  1256.  
  1257. /**
  1258.  * Displays a file selector request dialog.  Returns the selected filename into
  1259.  * the callback.  Can be used for either opening a file or saving a file.
  1260.  *
  1261.  * @param handle      The plugin or connection handle.
  1262.  * @param title       The title for the dialog (may be NULL)
  1263.  * @param filename    The default filename (may be NULL)
  1264.  * @param savedialog  True if this dialog is being used to save a file.
  1265.  *                    False if it is being used to open a file.
  1266.  * @param ok_cb       The callback for the OK button.
  1267.  * @param cancel_cb   The callback for the cancel button.
  1268.  * @param user_data   The data to pass to the callback.
  1269.  *
  1270.  * @return A UI-specific handle.
  1271.  */
  1272. void *gaim_request_file(void *handle, const char *title, const char *filename,
  1273.                         gboolean savedialog,
  1274.                         GCallback ok_cb, GCallback cancel_cb,
  1275.                         void *user_data);
  1276.  
  1277. /*@}*/
  1278.  
  1279. /**************************************************************************/
  1280. /** @name UI Operations API                                               */
  1281. /**************************************************************************/
  1282. /*@{*/
  1283.  
  1284. /**
  1285.  * Sets the UI operations structure to be used when displaying a
  1286.  * request.
  1287.  *
  1288.  * @param ops The UI operations structure.
  1289.  */
  1290. void gaim_request_set_ui_ops(GaimRequestUiOps *ops);
  1291.  
  1292. /**
  1293.  * Returns the UI operations structure to be used when displaying a
  1294.  * request.
  1295.  *
  1296.  * @return The UI operations structure.
  1297.  */
  1298. GaimRequestUiOps *gaim_request_get_ui_ops(void);
  1299.  
  1300. /*@}*/
  1301.  
  1302. #ifdef __cplusplus
  1303. }
  1304. #endif
  1305.  
  1306. #endif /* _GAIM_REQUEST_H_ */
  1307.